package com.jiangxue.strategy;

public abstract class Duck {
    //组合（委托）：策略类作为抽象基类的成员变量
    QuackBehavior quackBehavior;
    FlyBehavior flyBehavior;
    //定义抽象方法：子类必须要实现
    public abstract void display();
    //调用类成员的方法
    public void performQuack(){
        quackBehavior.quack();;
    }
    public void performFly(){
        flyBehavior.fly();
    }
    //所有子类都有的共有行为
    public void swim(){
        System.out.println("All ducks float, even decoys");
    }
    //setter方法设置鸭子行为（运行时改变行为）
    public void setFlyBehavior(FlyBehavior fb){
        flyBehavior = fb;
    }

    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }
}
